using System;
using System.Collections.Generic;

namespace EstimationStudio.Core
{
	/// <summary>
	///  The Feature class represents a single <see cref="Feature"/> used in an <see cref="Estimate"/>.
	/// </summary>
	[Serializable]
	public class Feature
	{
		/// <summary>
		/// Initializes a new instance of the <see cref="Feature"/> class.
		/// </summary>
		public Feature ()
        {
            Name =
                Description = 
                SolutionNotes = String.Empty;
        }

		/// <summary>
		///  Gets or Sets the name of the <see cref="Feature"/>.
		/// </summary>
        public String Name { get; set; }

		/// <summary>
		///  Gets or Sets the description of the <see cref="Feature"/>.
		/// </summary>
        public String Description { get; set; }

		/// <summary>
		///  Gets or Sets the solution related notes of the <see cref="Feature"/>.
		/// </summary>
        public String SolutionNotes { get; set; }

        /// <summary>
        ///  Gets or Sets the risks of the <see cref="Feature"/>.
        /// </summary>
        public String Risks { get; set; }

		/// <summary>
		///  Gets or Sets the best possible outcoume for the <see cref="Feature"/>.
		/// </summary>
        public Double BestCase { get; set; }

		/// <summary>
		///  Gets or Sets the most likely outcome for the <see cref="Feature"/>.
		/// </summary>
        public Double NominalCase { get; set; }

		/// <summary>
		///  Gets or Sets the worst possible outcome for the <see cref="Feature"/>.
		/// </summary>
        public Double WorstCase { get; set; }

		/// <summary>
		///  Gets the expected outcome for the <see cref="Feature"/>.
		/// </summary>
		public Double ExpectedCase
		{
			get { return new Formulas().ExpectedCase(BestCase, NominalCase, WorstCase); }
		}
	}
}